package dataStructQueue;

public class MyCircularQueue {

    // 循环队列 通过数组实现
    private int[] elem;
    private int front; // 定义一个头指针
    private int rear; //  定义一个尾指针

    public MyCircularQueue(int k) {
        this.elem = new int[k+1];
    }

    public boolean enQueue(int value) {
        if(isFull()){
            return false;
        }else {
            elem[rear] = value;
            rear = (rear+1)% elem.length;
        }
        return true;
    }

    public boolean deQueue() {
        if(isEmpty()){
            return false;
        }else {
            front = (front+1)% elem.length;
        }
        return true;
    }

    public int Front() {
        if(isEmpty()){
            return -1;
        }
        return elem[front];
    }

    public int Rear() {
        if(isEmpty()){
            return -1;
        }
        return elem[(rear+ elem.length - 1)%elem.length];
    }

    public boolean isEmpty() {
        if(front == rear){
            return true;
        }
        return false;
    }

    public boolean isFull() {
        return (rear+1)% elem.length == front;
    }
}
